热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

木鱼|纵向_前端添加水印效果攻略vue和原生js添加方式

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前端添加水印效果攻略vue和原生js添加方式相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了前端添加水印效果攻略vue和原生js添加方式相关的知识,希望对你有一定的参考价值。





💌 作者简介


  1. 📖 个人介绍:小伙伴们,大家好!我是水香木鱼,【前端领域创作者】😜

  2. 📜 CSDN主页:水香木鱼

  3. 📑 个人博客:陈春波

  4. 🎨 系列专栏:后台管理系统

  5. 🌹 一键四连:关注💋+点赞👍+收藏⭐+留言📝

  6. 📢 人生箴言:即使没有万全准备,也要勇敢迈出第一步。





期待已久的添加水印方法它来啦!一🚀 喜欢原生js和vue的你,看过来吧。👇





一、🛸原生JS 添加水印方法


1、创建 warterMarkJS.js文件


2、页面内使用



注意:全局引用的话,需要在主页面内引入


DOCTYPE html>
<html lang&#61;"en">
<head>
<meta charset&#61;"UTF-8">
<meta http-equiv&#61;"X-UA-Compatible" content&#61;"IE&#61;edge">
<meta name&#61;"viewport" content&#61;"width&#61;device-width, initial-scale&#61;1.0">
<title>原生JS添加水印攻略title>

<script src&#61;"./js/warterMarkJS.js">script>
<style>
style>
head>
<body style&#61;"height: 600px">

<div class&#61;"elementdiv">div>
<script>
//设置水印名称
watermark(&#39;水香木鱼&#39;, "SXMY")
script>
body>
html>

3、原生JS源码warterMarkJS.js

/*水印配置*/
function watermark(firstNode, secondNode)
//绑定容器
var container &#61; document.getElementsByClassName(&#39;elementdiv&#39;)
if (container.length > 0)
for (var i &#61; container.length - 1; i >&#61; 0; i--)
document.body.removeChild(container[i])


var elementWidth &#61; document.documentElement.offsetWidth; //返回元素的宽度&#xff08;包括元素宽度、内边距和边框&#xff0c;不包括外边距&#xff09;
var elementHeight &#61; document.documentElement.offsetHeight; //返回元素的高度&#xff08;包括元素高度、内边距和边框&#xff0c;不包括外边距&#xff09;
var intervalWidth &#61; 340; //设置水印的间隔宽度
var intervalheight &#61; 200; //设置水印的间隔高度
var crosswise &#61; (elementWidth - 60 - 200) / intervalWidth; //水印的横向个数
var lengthways &#61; (elementHeight - 60 - 80) / intervalheight; //水印的纵向个数
//水印默认配置
var watermarkConfiguration &#61;
watermarkFont: &#39;微软雅黑&#39;, //水印字体
watermarkColor: &#39;red&#39;, //水印字体颜色
watermarkFontsize: &#39;18px&#39;, //水印字体大小
watermarkTransparency: 0.15, //水印透明度
watermarkWidth: 230, //水印宽度
watermarkHeight: 100, //水印长度
watermark_angle: 20 //水印倾斜度数
;
// 创建文档碎片节点(关键代码)
var _template &#61; document.createDocumentFragment();
//遍历外层横向个数
for (var i &#61; 0; i < crosswise; i&#43;&#43;)
//遍历内层纵向个数
for (var j &#61; 0; j < lengthways; j&#43;&#43;)
var xaxis &#61; intervalWidth * i &#43; 26;
var yaxis &#61; intervalheight * j &#43; 26;
//创建水印
var watermarkDiv &#61; document.createElement(&#39;div&#39;);
watermarkDiv.id &#61; &#39;watermarkDiv&#39; &#43; i &#43; j;
watermarkDiv.className &#61; &#39;watermarkDiv&#39;;
///节点创建
var spanFirst &#61; document.createElement(&#39;div&#39;); //第一个节点
var spanSecond &#61; document.createElement(&#39;div&#39;); //第二个节点
spanFirst.appendChild(document.createTextNode(firstNode));
spanSecond.appendChild(document.createTextNode(secondNode));
watermarkDiv.appendChild(spanFirst);
watermarkDiv.appendChild(spanSecond);
/*样式配置*/
//设置水印div倾斜显示
watermarkDiv.style.webkitTransform &#61; "rotate(-" &#43; watermarkConfiguration.watermark_angle &#43; "deg)"; //针对 safari 浏览器支持
watermarkDiv.style.MozTransform &#61; "rotate(-" &#43; watermarkConfiguration.watermark_angle &#43; "deg)";
watermarkDiv.style.msTransform &#61; "rotate(-" &#43; watermarkConfiguration.watermark_angle &#43; "deg)";
watermarkDiv.style.OTransform &#61; "rotate(-" &#43; watermarkConfiguration.watermark_angle &#43; "deg)";
watermarkDiv.style.transform &#61; "rotate(-" &#43; watermarkConfiguration.watermark_angle &#43; "deg)";
watermarkDiv.style.opacity &#61; watermarkConfiguration.watermarkTransparency; //水印透明度
watermarkDiv.style.fontSize &#61; watermarkConfiguration.watermarkFontsize; //水印字体大小
watermarkDiv.style.fontFamily &#61; watermarkConfiguration.watermarkFont; //水印字体
watermarkDiv.style.color &#61; watermarkConfiguration.watermarkColor; //水印颜色
watermarkDiv.style.width &#61; watermarkConfiguration.watermarkWidth &#43; &#39;px&#39;; //水印宽度
watermarkDiv.style.height &#61; watermarkConfiguration.watermarkHeight &#43; &#39;px&#39;; //水印高度
watermarkDiv.style.visibility &#61; ""; //看不见但是摸得着。
watermarkDiv.style.position &#61; "absolute"; //水印绝对定位
watermarkDiv.style.left &#61; xaxis &#43; &#39;px&#39;; //Y轴
watermarkDiv.style.top &#61; yaxis &#43; &#39;px&#39;; //X轴
watermarkDiv.style.overflow &#61; "hidden";
watermarkDiv.style.zIndex &#61; "9999"; //设置优先级
watermarkDiv.style.pointerEvents &#61; &#39;none&#39;; //pointer-events:none 让水印不阻止交互事件
watermarkDiv.style.textAlign &#61; "center"; //水平居中
watermarkDiv.style.display &#61; "block"; //显示元素
_template.appendChild(watermarkDiv); //从一个元素向另一个元素中移动元素


document.body.appendChild(_template);




二、&#x1f6f0; VUE 添加水印方法


1、创建 warterMarkVUE.js文件


2、全局使用水印



App.vue中引用


<script>
import Watermark from "./views/advanced/js/warterMarkVUE";
export default
//初始化加载
mounted()
Watermark.set("水香木鱼");//添加水印名称
,

</script>

3、局部使用水印



局部引用&#xff0c;把warterMarkVUE.js文件引用到单页面内即可使用,木鱼在这里就不过多的阐述了。【和全局引用一样&#xff0c;只不过是引用的页面不一样】一个是全局显示、一个是在单页面内显示



4、VUE源码 warterMarkVUE.js

/*水印配置*/
//声明
let watermark &#61;
//水印配置
let setWatermark &#61; (str) &#61;>
let id &#61; &#39;1.23452384164.123412415&#39;
// 移除水印 判断
if (document.getElementById(id) !&#61;&#61; null)
document.body.removeChild(document.getElementById(id))

//创建画布
let createCanvas &#61; document.createElement(&#39;canvas&#39;)
// 设置canvas画布大小
createCanvas.width &#61; 250 //宽度
createCanvas.height &#61; 220 //高度
//创建Context2D对象作为2D渲染的上下文。
let Context2D &#61; createCanvas.getContext(&#39;2d&#39;)
/*水印样式调整配置*/
Context2D.rotate(-20 * Math.PI / 100) // 水印旋转角度
Context2D.font &#61; &#39;20px Vedana&#39; //水印文字大小
Context2D.fillStyle &#61; &#39;#fff&#39; //水印颜色 HEX格式,可使用red 或者rgb格式
Context2D.textAlign &#61; &#39;center&#39; //水印水平位置
Context2D.textBaseline &#61; &#39;Middle&#39; //水印垂直位置
Context2D.fillText(str, createCanvas.width / 3, createCanvas.height / 2)
//创建元素
let createDiv &#61; document.createElement(&#39;div&#39;)
createDiv.id &#61; id
//水印默认设置
createDiv.style.pointerEvents &#61; &#39;none&#39; //水印层事件穿透 让水印不阻止交互事件
createDiv.style.top &#61; &#39;70px&#39; //水印顶部距离
createDiv.style.left &#61; &#39;0px&#39; //水印左侧距离
createDiv.style.opacity &#61; &#39;0.15&#39; //水印透明度
createDiv.style.position &#61; &#39;fixed&#39; //水印定位
createDiv.style.zIndex &#61; &#39;100000&#39; //水印样式优先显示
createDiv.style.width &#61; document.documentElement.clientWidth - 100 &#43; &#39;px&#39; //水印宽度
createDiv.style.height &#61; document.documentElement.clientHeight - 100 &#43; &#39;px&#39; //水印高度
createDiv.style.background &#61; &#39;url(&#39; &#43; createCanvas.toDataURL(&#39;image/png&#39;) &#43; &#39;) left top repeat&#39; //水印显示(关键代码)
document.body.appendChild(createDiv) //在指定元素节点的最后一个子节点之后添加节点
return id

// 此方法只允许调用一次
watermark.set &#61; (str) &#61;>
let id &#61; setWatermark(str)
//设置间隔
setInterval(() &#61;>
if (document.getElementById(id) &#61;&#61;&#61; null)
id &#61; setWatermark(str)

, 500)
//改变大小时执行
window.onresize &#61; () &#61;>
setWatermark(str)


export default watermark



&#x1f4d6; 博主致谢

感谢大家阅读到结尾&#xff0c;本次的文章就分享到这里&#xff0c;总结了【vue添加水印和原生js水印的攻略】&#xff0c;希望可以帮到大家&#xff0c;谢谢。

如果您觉得这篇文章有帮助到您的的话不妨【关注&#43;点赞&#43;收藏&#43;评论&#43;转发 】支持一下哟~~&#x1f61b;您的支持就是我更新的最大动力。&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;&#x1f447;



&#x1f6e9;往期精彩&#xff1a;

vue实现隐藏浏览器右侧滚动条功能

前端实现el-pagination分页的两种业务场景,你知道吗&#xff1f;

前端开发&#xff1a;颜色代码速查表【英文颜色、HEX格式、RGB格式】

前端实现div标签p标签等吸顶效果【Vue&#43;原生JS组合写法】

一文图解前端WebSocket 实时通信


推荐阅读
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • HTML 页面中调用 JavaScript 函数生成随机数值并自动展示
    在HTML页面中,通过调用JavaScript函数生成随机数值,并将其自动展示在页面上。具体实现包括构建HTML页面结构,定义JavaScript函数以生成随机数,以及在页面加载时自动调用该函数并将结果呈现给用户。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 本文详细介绍了一种利用 ESP8266 01S 模块构建 Web 服务器的成功实践方案。通过具体的代码示例和详细的步骤说明,帮助读者快速掌握该模块的使用方法。在疫情期间,作者重新审视并研究了这一未被充分利用的模块,最终成功实现了 Web 服务器的功能。本文不仅提供了完整的代码实现,还涵盖了调试过程中遇到的常见问题及其解决方法,为初学者提供了宝贵的参考。 ... [详细]
  • 本文探讨了如何利用 jQuery 的 JSONP 技术实现跨域调用外部 Web 服务。通过详细解析 JSONP 的工作原理及其在 jQuery 中的应用,本文提供了实用的代码示例和最佳实践,帮助开发者解决跨域请求中的常见问题。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • Python 程序转换为 EXE 文件:详细解析 .py 脚本打包成独立可执行文件的方法与技巧
    在开发了几个简单的爬虫 Python 程序后,我决定将其封装成独立的可执行文件以便于分发和使用。为了实现这一目标,首先需要解决的是如何将 Python 脚本转换为 EXE 文件。在这个过程中,我选择了 Qt 作为 GUI 框架,因为之前对此并不熟悉,希望通过这个项目进一步学习和掌握 Qt 的基本用法。本文将详细介绍从 .py 脚本到 EXE 文件的整个过程,包括所需工具、具体步骤以及常见问题的解决方案。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 本文详细介绍了在Linux系统上编译安装MySQL 5.5源码的步骤。首先,通过Yum安装必要的依赖软件包,如GCC、GCC-C++等,确保编译环境的完备。接着,下载并解压MySQL 5.5的源码包,配置编译选项,进行编译和安装。最后,完成安装后,进行基本的配置和启动测试,确保MySQL服务正常运行。 ... [详细]
  • 在最近的学习过程中,我对Vue.js中的Prop属性有了更深入的理解,并认为这一知识点至关重要,因此在此记录一些心得体会。Prop属性用于在组件之间传递数据。由于每个组件实例的作用域都是独立的,无法直接引用父组件的数据。通过使用Prop,可以将数据从父组件安全地传递到子组件,确保数据的隔离性和可维护性。 ... [详细]
  • 在本文中,我们将为 HelloWorld 项目添加视图组件,以确保控制器返回的视图路径能够正确映射到指定页面。这一步骤将为后续的测试和开发奠定基础。首先,我们将介绍如何配置视图解析器,以便 SpringMVC 能够识别并渲染相应的视图文件。 ... [详细]
  • 本文探讨了资源访问的学习路径与方法,旨在帮助学习者更高效地获取和利用各类资源。通过分析不同资源的特点和应用场景,提出了多种实用的学习策略和技术手段,为学习者提供了系统的指导和建议。 ... [详细]
  • MySQL数据库安装图文教程
    本文详细介绍了MySQL数据库的安装步骤。首先,用户需要打开已下载的MySQL安装文件,例如 `mysql-5.5.40-win32.msi`,并双击运行。接下来,在安装向导中选择安装类型,通常推荐选择“典型”安装选项,以确保大多数常用功能都能被正确安装。此外,文章还提供了详细的图文说明,帮助用户顺利完成整个安装过程,确保数据库系统能够稳定运行。 ... [详细]
  • Python 中 json.dumps() 和 json.loads() 的使用方法详解——Python 面试与 JavaScript 面试必备知识
    在 Python 中,`json.dumps()` 和 `json.loads()` 是处理 JSON 数据的核心函数。`json.dumps()` 用于将字典或其他可序列化对象转换为 JSON 格式的字符串,而 `json.loads()` 则用于将 JSON 字符串解析为 Python 对象。本文详细介绍了这两个函数的使用方法及其在 Python 和 JavaScript 面试中的重要性,帮助读者掌握这些关键技能。 ... [详细]
author-avatar
风一样的骨头gg
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有